Flowable 协同办公模块使用
一、业务介绍
pigx-flow 模块通过整合 flowable 完成简单的流程发起、审批、拒绝等操作。实现类似于企业微信、钉钉等企业常见的简易审批工作流。
通过改进后的动态表单设计器,用户可以轻松创建和编辑动态表单,支持自定义字段和验证规则。而流程设计器则提供了直观的拖放界面,使得审批流使用体验类似于企业微信或钉钉。我们相信这些改进将极大地提升用户的工作效率和体验。
二、快速开始
2.1 创建分组
流程分组用于组织和管理不同类型的工作流,建议按业务模块或部门划分。
操作步骤:流程管理 > 创建分组
2.2 创建流程
创建流程包含三个步骤:基础信息配置、表单设计、流程设计。
2.2.1 基础信息配置
必填字段:
| 字段名 | 说明 | 要求 |
|---|
| 图标 | 流程的图标,在流程列表中显示 | 必填,上传图片 |
| 名称 | 流程的显示名称 | 必填,2-10个字符 |
| 分组 | 流程所属的分组 | 必填,从已创建的分组中选择 |
| 管理员 | 流程的管理员,可以管理和维护该流程 | 必填,选择一名用户 |
可选字段:
| 字段名 | 说明 | 要求 |
|---|
| 流程ID | 流程的唯一标识符 | 可选,填写必须和自定义表单流程的KEY一致 (Flowable 自定义业务表单) |
| 备注 | 流程的说明信息 | 可选,2-20个字符 |
2.2.2 表单设计
表单设计支持两种模式:
方式一:动态表单(推荐)
使用可视化表单设计器,通过拖拽组件快速构建表单。
业务组件(专为工作流设计):
- 人员:选择用户
- 部门:选择部门
- 上传:上传文件附件
- 图片:上传图片
- 地区:选择省市区
- 签名:手写签名
- 字典:从数据字典中选择
- 流水号:自动生成编号
基础组件:
- 输入框、多行输入框、密码输入框
- 计数器(数字输入)
- 单选框、多选框、选择器
- 开关、评分
- 时间、时间区间
- 滑块
设计器特性:
- 拖拽式操作,所见即所得
- 支持字段验证规则
- 支持字段联动和条件显示
- 实时预览表单效果
方式二:自定义表单
适用于复杂业务场景,使用自定义Vue页面作为表单。
参考 Flowable 自定义业务表单
2.2.3 流程设计
在流程设计器中,通过可视化方式设计审批流程。
设计器功能:
- 缩放控制:支持50%-300%缩放
- 拖拽添加节点
- 实时流程预览
- 节点配置面板
可添加的节点类型:
| 节点类型 | 说明 |
|---|
| 审批人 | 需要审批的节点,可配置多种审批方式 |
| 抄送人 | 通知节点,相关人员可查看但不需要审批 |
| 条件分支 | 根据条件判断流程走向 |
| 并行分支 | 多个分支同时执行 |
流程设计要点:
- 每个流程必须有"发起人"节点(自动创建)
- 至少需要一个审批节点
- 条件分支必须配置判断条件
- 所有分支最终必须汇聚
三、流程节点配置详解
3.1 发起人节点配置
发起人节点是流程的起始节点,配置哪些人可以发起该流程以及发起人对表单的权限。
3.1.1 设置发起人
配置选项:
- 所有人:默认选项,组织内所有用户都可以发起
- 指定成员:只有特定用户可以发起
- 指定部门:特定部门的成员可以发起
- 指定角色:拥有特定角色的用户可以发起
使用场景:
- 所有人:请假申请、报销申请等通用流程
- 指定成员:仅特定人员可以发起的流程(如月度报告提交)
- 指定部门:部门专用流程(如销售部的客户拜访申请)
- 指定角色:角色相关流程(如项目经理才能发起项目立项)
3.1.2 表单权限
设置发起人对表单各个字段的访问权限。
权限级别:
| 权限 | 说明 | 使用场景 |
|---|
| 可写 | 发起人可以查看和编辑字段 | 默认权限,适用于大部分字段 |
| 只读 | 发起人只能查看,不能修改 | 系统自动填充的字段(如流水号、创建时间) |
| 隐藏 | 发起人不可见该字段 | 内部使用字段,发起人不需要知道 |
最佳实践:
- 发起人填写的字段通常设为"可写"
- 系统自动生成的字段设为"只读"
- 仅供审批人使用的字段设为"隐藏"
3.2 审批人节点配置
审批人节点是流程的核心,支持多种灵活的审批方式。
3.2.1 审批人设置方式
支持7种审批人指定方式:
1. 指定成员
直接指定具体的用户作为审批人,支持选择多个用户。
使用场景:
- 固定审批人的流程(如报销必须由财务经理审批)
- 特定岗位审批(如合同必须由法务审批)
示例:
- "财务报销" 指定财务经理张三
- "合同审批" 指定法务部李四和王五
2. 部门主管
默认情况下:由发起人所在部门的主管审批。(如果流程节点设置了指定主管,则由对应人审批)
使用场景:
配置方法:
- 系统管理 > 岗位管理 > 添加岗位 > 创建"部门主管"岗位(岗位编码:TEAM_LEADER)
- 系统管理 > 用户管理 > 为对应用户分配部门主管岗位
3. 角色
指定拥有某个角色的所有用户作为审批人。
使用场景:
- 基于职能的审批(如所有审计员都可以审批审计申请)
- 轮值审批(角色下的任何人都可以审批)
示例:
- "质量检查" 由所有质检角色人员审批
- "安全审查" 由所有安全员角色人员审批
4. 发起人自选
流程发起时,由发起人自己选择审批人。
使用场景:
示例:
- "项目立项" 允许发起人选择项目负责人审批
- "专项申请" 发起人选择相关领导审批
5. 发起人自己
由发起人自己审批(用于特殊场景)。
使用场景:
示例:
- "信息登记" 发起人填写后自己确认
- "知识分享" 发起人提交后自己发布
6. 流程表达式
使用动态表达式根据业务逻辑确定审批人。
配置格式:${beanName.methodName(execution)}
注意:需要开发支持,开发人员需要实现对应的Spring Bean方法。 详细参考 Flowable 自定义表达式
7. 表单人员
使用表单中的"人员"字段作为审批人。
使用场景:
示例:
- "项目申请" 由表单中填写的"项目负责人"审批
- "采购申请" 由表单中选择的"部门负责人"审批
注意:表单中必须有"人员"类型的组件。
3.2.2 多人审批模式
当审批人设置方式匹配到多个用户时(如指定成员选择了多人、角色下有多个用户等),需要配置多人审批模式。
| 审批模式 | 说明 | 审批规则 | 使用场景 |
|---|
| 会签 | 所有人都必须审批通过 | 全部同意才通过,任一人拒绝则拒绝 | 重要决策需要所有相关人员一致同意(如重大采购、重要合同) |
| 或签 | 任意一人审批通过即可 | 任一人同意即通过,全部拒绝才拒绝 | 多个备选审批人,任一人审批即可(如多个经理都可以审批请假) |
| 依次审批 | 按顺序逐个审批 | 按指定顺序依次审批,前一人通过后下一人才能审批 | 有明确审批顺序的流程(如初审→复审→终审) |
最佳实践:
- 会签:适用于需要多方共同决策的场景,如跨部门协作、重大投资决策
- 或签:适用于多个同等权限的审批人,提高审批效率
- 依次审批:适用于有审批层级的流程,确保审批顺序
3.2.3 审批人为空时处理
当审批人设置方式未能匹配到任何用户时(如部门没有主管、角色下没有用户等),系统需要知道如何处理。
| 处理方式 | 说明 | 使用场景 |
|---|
| 自动通过 | 跳过该审批节点,自动流转到下一节点 | 非必要的审批环节,审批人缺失时可以跳过 |
| 自动拒绝 | 自动拒绝该流程申请 | 严格的审批流程,必须有审批人才能通过 |
| 自动结束 | 直接结束流程,不再继续流转 | 特殊情况下需要终止流程的场景 |
| 转交给管理员 | 转交给流程管理员处理 | 需要人工介入判断的场景 |
| 指定人员 | 转交给预先指定的备用审批人 | 有明确备用审批人的场景 |
最佳实践:
- 推荐使用"转交给管理员"或"指定人员",避免流程卡住
- 严格流程使用"自动拒绝"
- 确保组织架构完整,减少审批人为空的情况
3.2.4 审批拒绝处理
当审批人拒绝申请时,可以配置拒绝后的处理方式。
| 处理方式 | 说明 | 流程状态 | 使用场景 |
|---|
| 直接结束流程 | 拒绝后流程立即终止 | 流程结束,状态为"已拒绝" | 严格的审批流程,一旦拒绝即失败 |
| 驳回到指定节点 | 退回到之前的某个节点,可以修改后重新提交 | 流程回退到指定节点,可以重新流转 | 允许修改后重新审批的流程 |
驳回到指定节点
配置选项:
- 可以选择当前节点之前的任何审批节点
- 退回后从该节点重新开始流转
- 支持退回给发起人或其他审批节点
常见场景:
- 退回给发起人:信息填写有误,需要发起人修改
- 退回到上一级审批:上一级审批有误,需要重新审批
- 退回到特定节点:某个环节有问题,需要从该环节重新审批
- 示例:财务审批发现采购流程有问题,退回到采购审批重新确认
最佳实践:
- 常规业务流程建议使用"驳回到指定节点",增加流程灵活性
- 严格流程(如资质认证、合规审查)使用"直接结束流程"
- 明确告知用户拒绝原因,可以在审批意见中说明
3.2.5 表单权限配置
对于动态表单,可以为审批人配置每个字段的访问权限。
权限级别:
| 权限 | 说明 | 审批人操作 | 使用场景 |
|---|
| 可写 | 审批人可以查看和修改字段 | 可以修改字段内容 | 审批人需要补充或修正信息 |
| 只读 | 审批人只能查看,不能修改 | 只能查看,不可编辑 | 供审批人参考的字段 |
| 隐藏 | 审批人不可见该字段 | 完全不可见 | 与该审批人无关的敏感字段 |
最佳实践:
- 只读:大部分字段建议设为只读,供审批人查看但不修改
- 可写:审批人需要补充的字段
- 隐藏:敏感字段或与审批人无关的字段
配置界面:
表单权限以矩阵形式展示,每个字段可以选择"只读"、"可写"或"隐藏"。
3.2.6 事件通知配置
配置审批完成后的事件通知,实现与外部系统的集成。
配置项:
通知时机:
通知方式:
通知内容:
- 流程ID(flowId)
- 流程实例ID(processInstanceId)
- 表单数据(data)
- 节点ID(nodeId)
- 审批人ID(userId)
- 任务ID(taskId)
- 审批意见(approveDesc)
- 节点名称(nodeName)
- 更多字段详见"进阶使用 > 节点任务通知"章节
使用场景:
- 与ERP系统集成:审批通过后自动创建订单
- 与CRM系统集成:合同审批通过后自动同步到CRM
- 发送通知:审批完成后发送邮件、短信、企业微信通知
- 触发其他业务流程:审批完成后触发下一个业务流程
3.3 抄送人节点配置
抄送人节点用于通知相关人员查看流程,抄送人不需要审批,只有查看权限。
3.3.1 抄送人设置
配置选项:
- 指定成员:选择具体的用户作为抄送人
- 指定部门:选择部门,该部门所有成员都会收到抄送
- 指定角色:选择角色,拥有该角色的用户都会收到抄送
使用场景:
- 知会相关领导或部门
- 信息同步给相关团队
- 备案和存档
示例:
- "请假流程" 抄送给HR部门备案
- "报销流程" 抄送给财务部门存档
- "项目立项" 抄送给相关部门负责人
3.3.2 表单权限
设置抄送人对表单字段的访问权限。
权限级别:
- 只读(推荐):抄送人只能查看表单内容
- 隐藏:对抄送人隐藏敏感字段
注意:
- 抄送人不支持"可写"权限,因为抄送人不应该修改表单
- 默认所有字段为"只读"
最佳实践:
- 一般情况下,抄送人可以查看所有字段
- 敏感信息(如薪资、绩效)可以对无关抄送人隐藏
3.4 条件分支配置
条件分支用于根据表单数据或业务规则,将流程导向不同的审批路径。
3.4.1 条件设置方式
支持两种条件配置方式:
方式一:条件组方式(推荐)
基于表单字段和运算符构建条件,支持可视化配置,无需编码。
支持的字段类型和运算符:
| 字段类型 | 支持的运算符 | 说明 |
|---|
| 人员/部门 | 属于、不属于 | 判断是否属于指定的人员或部门 |
| 文本字段 | 等于、不等于、包含、不包含 | 文本匹配判断 |
| 数字字段 | ==, !=, >, >=, <, <= | 数值比较 |
| 日期字段 | ==, !=, >, >=, <, <= | 日期比较 |
| 单选字段 | 等于、不等于 | 选项值匹配 |
条件组合:
- 支持多个条件组合
- 条件之间可以使用"且"(AND)或"或"(OR)逻辑
- 支持嵌套的条件组
配置示例:
场景1:报销金额审批
- 条件分支1:报销金额 <= 5000 → 部门经理审批
- 条件分支2:报销金额 > 5000 且 报销金额 <= 20000 → 财务经理审批
- 条件分支3:报销金额 > 20000 → 财务总监审批
- 其他条件:默认走管理员审批
场景2:请假天数审批
- 条件分支1:请假天数 <= 3 → 直接主管审批
- 条件分支2:请假天数 > 3 且 请假天数 <= 10 → 部门经理审批
- 条件分支3:请假天数 > 10 → HR总监审批
场景3:复合条件审批
- 条件分支1:请假天数 > 3 且 请假类型 = "年假" → 部门经理审批
- 条件分支2:请假类型 = "病假" 或 请假类型 = "事假" → 直接主管审批
- 其他条件:默认审批流程
方式二:表达式方式
使用流程表达式动态判断,适用于复杂业务逻辑。
配置格式:${beanName.methodName(execution)}
使用场景:
- 需要查询数据库或第三方系统的复杂判断
- 涉及多个表单字段的复杂计算
- 需要调用业务规则引擎的场景
注意:需要开发支持,开发人员需要实现对应的Spring Bean方法。详细参考 Flowable 自定义表达式
3.4.2 多条件分支
分支配置规则:
- 可以添加多个条件分支(建议不超过10个)
- 条件按优先级从上到下判断
- 满足第一个条件后,进入对应的分支,不再判断后续条件
- 最后一个分支为"其他条件"(默认分支),作为兜底
分支优先级调整:
- 使用上下箭头调整分支顺序
- 将最常见的条件放在前面,提高判断效率
- 将覆盖范围广的条件放在后面
示例配置顺序:
优先级1: 报销金额 > 50000 → 总经理审批
优先级2: 报销金额 > 20000 → 财务总监审批
优先级3: 报销金额 > 5000 → 财务经理审批
优先级4: 其他条件(金额 <= 5000) → 部门经理审批
3.4.3 条件判断说明
判断流程:
- 流程执行到条件分支节点时,从第一个分支开始判断
- 依次检查每个分支的条件是否满足
- 一旦找到满足条件的分支,进入该分支执行,停止后续条件判断
- 如果所有条件都不满足,进入"其他条件"分支
最佳实践:
- 确保条件互斥,避免歧义
- 将最常见的条件放在前面
- 必须配置"其他条件"分支作为兜底
- 测试所有分支的条件逻辑
注意事项:
- 条件分支至少需要2个分支(包括"其他条件")
- 每个分支的条件必须配置完整
- 条件判断区分大小写(文本字段)
- 数字和日期比较时注意数据类型匹配
3.5 并行分支配置
并行分支用于多个审批路径同时执行,提高审批效率。
3.5.1 并行分支说明
特点:
- 多个分支同时并行执行
- 不需要配置条件判断
- 所有分支完成后才继续后续流程
与条件分支的区别:
| 特性 | 条件分支 | 并行分支 |
|---|
| 执行方式 | 根据条件只执行一个分支 | 所有分支同时执行 |
| 条件配置 | 需要配置判断条件 | 不需要配置条件 |
| 完成条件 | 选中的分支完成即可 | 所有分支都必须完成 |
| 使用场景 | 互斥的审批路径 | 并行的审批任务 |
3.5.2 使用场景
场景1:多部门并行审批
- 采购申请需要财务部和行政部同时审批
- 项目立项需要技术部、市场部、财务部并行审批
场景2:多项任务并行执行
- 员工入职需要同时办理:IT设备申请、人事手续、财务账号开通
- 项目启动需要同时:合同签署、资源分配、环境准备
场景3:提高审批效率
- 重要决策需要多个领导并行审批,而非依次审批
- 多个独立的审批任务可以并行进行
配置示例:
采购流程并行审批:
发起人提交采购申请
↓
并行分支 {
分支1: 财务部审批(预算审核)
分支2: 行政部审批(资质审核)
分支3: 技术部审批(技术评估)
}
↓ (所有分支完成后汇聚)
总经理终审
↓
流程结束
四、流程操作
4.1 发起流程
在流程列表中选择需要发起的流程,填写表单后提交。
操作步骤:
- 进入"协同办公"或"流程中心"
- 选择对应的流程分组
- 点击要发起的流程
- 填写表单(必填字段需要填写完整)
- 点击"提交"发起流程
注意事项:
- 确保必填字段已填写
- 上传的附件不要超过系统限制
- 提交前仔细检查填写的信息
- 提交后可以在"发起历史"中查看流程进度
4.2 处理待办
在待办列表中查看并处理待审批的流程。
操作步骤:
- 进入"待办事项"或"我的待办"
- 查看待审批的流程列表
- 点击流程查看详情
- 填写审批意见(可选)
- 点击"同意"或"拒绝"
审批操作:
- 同意:审批通过,流程继续流转
- 拒绝:根据配置,可能直接结束流程或退回到指定节点
- 转交:将任务转交给其他人处理(如果流程支持)
4.3 发起历史
查看自己发起的所有流程及其状态。
可查看的信息:
- 流程名称和编号
- 发起时间
- 当前状态(审批中、已通过、已拒绝、已撤销)
- 当前审批节点和审批人
- 审批历史记录
可执行的操作:
- 查看流程详情
- 查看审批记录
- 撤销流程(如果流程支持且未完成)
- 催办(提醒审批人尽快审批)
五、特殊操作
5.1 审批人:部门主管
配置步骤:
步骤1:添加部门主管岗位
系统管理 > 岗位管理 > 添加岗位 > 添加部门主管 (DEPT_LEADER) 岗位
岗位配置:
- 岗位名称:部门主管
- 岗位编码:DEPT_LEADER(必须使用此编码)
- 岗位说明:部门负责人
步骤2:为用户分配部门主管岗位
系统管理 > 用户管理 > 添加用户 > 设置用户为对应部门、对应岗位(部门主管)
配置要点:
- 用户必须属于某个部门
- 为该用户分配"部门主管"岗位
- 一个部门可以有多个主管(多人会签)
注意事项:
- 确保部门层级关系配置正确
- 每个部门至少配置一名部门主管
- 跨部门流程需要特别注意主管的归属
5.2 审批人:连续多级主管
业务描述:流程会连续向上级主管流转,直到某个主管审批通过或拒绝。
使用场景:
- 灵活的逐级审批,无需固定层级
- 金额分级审批(不同金额对应不同审批级别)
- 权限分级审批
配置方式:
在审批人设置中选择"连续多级主管"
执行逻辑:
- 从发起人的直接主管开始
- 如果该主管同意,流程继续
- 如果该主管拒绝,根据拒绝处理方式处理
- 如果该主管选择"上报",流转到其上级主管
- 重复此过程,直到有主管审批通过或拒绝
优点:
- 灵活的审批层级,不需要固定几级审批
- 适应组织架构变化
- 可以根据实际情况决定审批层级
六、进阶使用
6.1 业务侧发起流程
在实际业务场景中,您可能需要从自己的业务系统(如ERP、CRM等)中直接发起工作流,而不是通过PigX-OA的界面操作。这种情况下,您可以通过调用PigX-OA提供的API接口来实现流程的程序化发起。
@Autowire
RemoteFlowApiFlowService flowApiFlowService;
// 获取流程配置详情
ProcessInstanceParamDto processInstanceParamDto = new ProcessInstanceParamDto();
processInstanceParamDto.setFlowId(flowId);
processInstanceParamDto.setStartUserId(String.valueOf(user.getId()));
Map<String, Object> paramMap = new HashMap<>();
// 设置发起人
Dict rootUser = Dict.create()
.set("id", processInstanceParamDto.getStartUserId())
.set("name", user.getUsername())
.set("type", NodeUserTypeEnum.USER.getKey());
paramMap.put("root", CollUtil.newArrayList(rootUser));
processInstanceParamDto.setParamMap(paramMap);
flowService.startProcessInstance(processInstanceParamDto);
具体参考可以在协同办公里面 F12 具体看下提交流程发起需要的参数
6.2 节点任务通知
支持在节点对应任务完成后(审批通过、审批拒绝)往目标接口 POST JSON BODY推送消息。
通知数据字段:
| 字段名 | 类型 | 描述 |
|---|
| flowId | String | 流程id (process id) |
| processInstanceId | String | 流程实例id (process instance id) |
| data | String | 表单数据 (form data) |
| localData | String | 本地数据 (local data) |
| nodeId | String | 节点id (node id) |
| userId | Long | 用户id (user id) |
| executionId | String | 执行id (execution id) |
| taskId | String | 任务id (task id) |
| approveDesc | String | 审批描述 (approval description) |
| nodeName | String | 节点名称 (node name) |
| taskType | String | 任务类型 (task type) |
示例接收代码(Java):
// http://localhost:9999/test/webhook
@Inner(value = false)
@PostMapping("/webhook")
public R test(@RequestBody Map<String,Object> body) {
// body 业务处理
return R.ok("success");
}
使用场景:
- 审批完成后同步数据到其他系统
- 审批完成后发送通知(邮件、短信、企业微信)
- 审批完成后触发其他业务流程
- 审批完成后更新业务数据状态
6.3 流程状态查询
在接收到节点任务通知后,您可能需要确认整个流程的状态(是否已完成或被拒绝)。这可以通过使用流程实例ID(processInstanceId)进行查询实现。系统提供了相应的API接口,允许您根据processInstanceId检索流程的当前状态、历史记录和相关详情。

API说明:
- 接口地址:通过流程实例ID查询流程状态
- 返回信息:流程当前状态、当前节点、审批历史、表单数据等
流程状态字段说明:
status - 流程状态:
- 0 - 未提交:流程已创建但尚未提交
- 1 - 进行中:流程正在审批流转中
- 2 - 已完成:流程所有节点审批(拒绝/通过),正常结束
finish_reason - 流程完成原因:
- 0 - 拒绝:流程被审批人拒绝
- 1 - 通过:流程审批通过并完成
- 9 - 自动终止:流程用户自动终止
6.4 表单设计器个性化
本项目表单设计器功能基于 form-create 开源版本,根据 form-create 开源协议允许商业化使用。
如果进阶使用或者个性需求,请参考官方文档和视频:
可定制内容:
- 自定义表单组件
- 扩展表单验证规则
- 自定义表单样式
- 添加特殊业务逻辑
注意事项:
- 建议熟悉Vue 3和form-create框架后再进行定制
- 定制内容需要前端开发支持
- 升级系统版本时需要注意定制内容的兼容性